-- 引入外部文件
require "prefabutil"

-- 资源文件
local assets =
{
    Asset("ANIM", "anim/eggplant_avoiding_needle.zip"), -- 动画资源
    -- Asset("MINIMAP_IMAGE", "eggplant_avoiding_needle"),     -- 小地图图标
}

-- 预制物体列表
local prefabs =
{
    "collapse_small", -- 小物品破碎效果
}

-- 被锤击时的处理函数
local function onhammered(inst, worker)
    inst.components.lootdropper:DropLoot()                      -- 掉落物品
    local fx = SpawnPrefab("collapse_small")                    -- 生成小物品破碎特效
    fx.Transform:SetPosition(inst.Transform:GetWorldPosition()) -- 设置特效位置
    fx:SetMaterial("metal")                                     -- 设置特效材质
    inst:Remove()                                               -- 删除
end

-- 被击中时的处理函数
local function onhit(inst, worker)
    -- inst.AnimState:PlayAnimation("hit")         -- 播放被击中动画
    inst.AnimState:PushAnimation("idle", false) -- 播放待机动画
end


------------------------------------------------------------------------------

-- 完成建造后的处理
local function onbuilt(inst)
    -- inst.AnimState:PlayAnimation("place")                                -- 播放建造动画
    inst.AnimState:PushAnimation("idle")                                 -- 播放待机动画
    inst.SoundEmitter:PlaySound("dontstarve/common/lightning_rod_craft") -- 播放建造声音
    local x, y, z = inst.Transform:GetWorldPosition()
    SpawnPrefab("collapse_small").Transform:SetPosition(x, y, z)
end

-- 创建实体的函数
local function fn()
    local inst = CreateEntity()

    -- 添加实体组件
    inst.entity:AddTransform()
    inst.entity:AddAnimState()
    inst.entity:AddMiniMapEntity() -- 小地图实体
    -- inst.entity:AddLight()         -- 光源组件
    inst.entity:AddSoundEmitter()  -- 声音组件
    inst.entity:AddNetwork()       -- 网络组件

    -- 设置部署半径
    inst:SetDeploySmartRadius(0.5)

    -- 设置小地图图标
    inst.MiniMapEntity:SetIcon("eggplant_avoiding_needle.tex")

    -- 添加标签
    inst:AddTag("structure")
    inst:AddTag("eggplant_avoiding_needle")

    -- 设置动画
    inst.AnimState:SetBank("eggplant_avoiding_needle")
    inst.AnimState:SetBuild("eggplant_avoiding_needle")
    inst.AnimState:PlayAnimation("idle")

    -- 确保雪覆盖时的效果
    -- MakeSnowCoveredPristine(inst)


    -- 实体在网络客户端不会被重复创建
    inst.entity:SetPristine()

    if not TheWorld.ismastersim then
        return inst
    end


    -- 添加掉落物品组件
    inst:AddComponent("lootdropper")

    -- 添加可工作组件，设置锤击时的工作状态
    inst:AddComponent("workable")
    inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
    inst.components.workable:SetWorkLeft(4)
    inst.components.workable:SetOnFinishCallback(onhammered)
    inst.components.workable:SetOnWorkCallback(onhit)

    -- 添加检查组件
    inst:AddComponent("inspectable")


    -- 添加雪覆盖效果
    --MakeSnowCovered(inst)

    -- 监听建造事件
    inst:ListenForEvent("onbuilt", onbuilt)

    -- 让其可以成为鬼魂工作物品
    MakeHauntableWork(inst)


    return inst
end

-- 返回闪电棒预制体，并定义其放置器
return Prefab("eggplant_avoiding_needle", fn, assets, prefabs),
    MakePlacer("eggplant_avoiding_needle_placer", "eggplant_avoiding_needle", "eggplant_avoiding_needle", "idle")
